import java.awt.*;
import java.awt.geom.*;
/**
 * Clase heredada de la clase Ball que implementa la interfase Drawable.
 * @version 2
 */
class GBall extends Ball implements Drawable {
   private float radius;
   private float mass;
   private Color color = Color.BLUE;
   private Ellipse2D.Float shape = null;
   /**
    * Constructor de la bola gráfica con parámetros indicados.
    * @param mass masa de la bola.
    * @param position vector de posición de la bola.
    * @param speed velocidad inicial de la bola.
    * @param radius radio de la bola.
    */
   public GBall (float mass, Vector2D position, Vector2D speed,
                  float radius){
      super(mass, position, speed);
      this.radius = radius;
      this.mass = mass;
      setCrossSection(6*Math.PI*radius);
      shape = new Ellipse2D.Float((float)getX()-radius, (float)getY()-radius, 2*radius, 2*radius);
   }
   /**
    * Función que grafica la bola con sus datos.
    * @param g lienzo gráfico en 2 dimensiones para dibujar.
    */
   public void draw (Graphics2D g){
      shape.setFrame((float)getX()-radius, (float)getY()-radius, 2*radius, 2*radius);
      g.setColor(color);
      g.fill(shape);
      g.setColor(Color.WHITE); // agregada
      g.drawString(Float.toString(mass), (float)getX()-(radius/2), (float)getY()+(radius/3)); // agregada
   }
   /**
    * Función para consultar si el punto está dentro del dibujo de la bola.
    * @param x coordenada X.
    * @param y coordenada Y
    * @return estado si está o no incluido.
    */
   public boolean contains (int x, int y){
      return shape.contains(x,y);
   }
   /**
    * Función que fija la posición de la bola
    * @param x coordenada X.
    * @param y coordenada Y.
    */
   public void dragTo(int x, int y){
      setPosition(x,y);
   }
   /**
    * Función que cambia el color a rojo.
    */
   public void setSelected (){
      color = Color.RED;
   }
   /**
    * Función que cambia el color a azul.
    */
   public void setReleased() {
      color = Color.BLUE;
   }
}